#include "picturedb.h"
#include <QDebug>

PictureDB::PictureDB()
{
}

/**
 * @brief 从数据库获取文件路径
 *
 * @return QList<QString> 路径列表
 */
QStringList *PictureDB::getPath()
{
    QStringList *list = new QStringList;
    QSqlDatabase db = QSqlDatabase::database("my.db");
    QSqlQuery query(db);

    query.exec(QString("select path from myfiles "
                       "where isDelete = 0"));
    while(query.next())
    {
        list->append(query.value(0).toString());
    }

    return list;
}

/**
 * @brief 逻辑删除数据库
 *
 * @param name
 */
void PictureDB::remove(const QString &name)
{
    QSqlDatabase db = QSqlDatabase::database("my.db");
    QSqlQuery query(db);
    query.exec(QString("update myfiles set isDelete = 1 "
                       "where path like '%%1'").arg(name));
}

void PictureDB::run()
{
    if ( ! m_strPath.isEmpty())
    {
        bool bFind = search(QString("%1").arg(m_strPath));
        if (bFind)
        {
            this->insert();
        }
    }
}

/**
 * @brief 搜索音乐文件槽函数
 *
 */
void PictureDB::searchFile( const QString &strPath)
{
    m_strPath = strPath;
    this->start();
}

/**
 * @brief 递归遍历文件夹，找到所有的文件
 *
 * @param rootPath 要遍历的文件夹的根目录
 * @return bool 成功找到返回true, 否则返回false
 */
bool PictureDB::search(const QString &rootPath)
{
    QDir dir(rootPath);
    //判断根目录是否存在
    if (!dir.exists())
    {
        return false;
    }

    //取到所有的文件和文件名，但是去掉.和..的文件夹（这是QT默认有的）
    dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);

    //文件夹优先
    dir.setSorting(QDir::DirsFirst);

    //转化成一个list
    QFileInfoList list = dir.entryInfoList();
    if(list.size() < 1)
    {
        return false;
    }

    foreach (QFileInfo fileInfo, list)
    {
        //如果是目录继续递归
        if(fileInfo.isDir() == true)
        {
            search(fileInfo.filePath());
        }//end if
        else
        {
            //如果是文件，筛选出文件大于1KB的文件
            if (fileInfo.size() > 1024 &&
                    (fileInfo.suffix() == QString("png") ||
                     fileInfo.suffix() == QString("jpg") ||
                     fileInfo.suffix() == QString("bmp")
                     )
                    )
            {
                //将获取的文件路径存入Path
                Path.append(fileInfo);
            }//end if
        }//end else
    }//end foreach
    return true;
}

/**
 * @brief 将找到的音乐文件插入数据库
 *
 * @return void
 */
void PictureDB::insert()
{
    QSqlDatabase db = QSqlDatabase::database("my.db");
    QSqlQuery query(db);

    foreach (QFileInfo file, Path)
    {
        //构造插入数据库sql语句
        QString sql = QString("insert into myfiles values ('%1', '%2', 0)")
                .arg(file.filePath()).arg(file.baseName());
        //执行sql语句
        query.exec(sql);
    }
}
